import objectAssignDeep = require('object-assign-deep');

const objectA = {
	prop1: `Hello`,
	prop2: `World`,
	nested: {
		bool: true,
		super: 123,
		still: `here!`,
	},
	array1: [1, 2, 3],
	array2: [4, 5, 6],
};

const objectB = {
	prop2: `Universe`,
	name: `Josh`,
	nested: {
		bool: false,
	},
	array1: null,
};

const objectC = {
	location: `United Kingdom`,
	name: `Bob`,
	nested: {
		super: 999,
	},
	array2: [100, 101, 102],
};

const result: {
    array1: null,
    array2: number[],
    location: string,
    name: string,
    nested: {
        bool: boolean,
        still: string,
        super: number
    },
    prop1: string,
    prop2: string
} = objectAssignDeep(objectA, objectB, objectC);
